三大示例实战 Prometheus API 使用
关注公众号并添加到“星标⭐”,防止错过消息
后台回复【资料包】获取学习资料
做为一位优秀的技术人员,往往能通过对数据的最大化利用来产生更多价值。而Prometheus的监控数据则是可以为我们所用的重要数据,它并不只能用于日常的监控和告警使用,也可以用于数据分析、成本管理等企业需求。
在这种场景下,需要我们从Prometheus去获取相关的数据,并对其进行处理加工。关于数据的获取方法,通常会使用Prometheus提供的API来操作,本文将会对此进行讲解介绍。
01
—
400 Bad Request 参数丢失或不正确时出现。
422 Unprocessable Entity 当表达无法被执行时。
503 Service Unavailiable 查询超时或中止时。
在功能上,Prometheus API 提供了丰富的接口类型,包括表达式查询、元数据查询、配置查询、规则查询等多个功能,甚至还有清理数据的接口。当API正常响应后,将返回如下的Json数据格式。{
"status": "success" | "error",
"data": <data>,
// Only set if status is "error". The data field may still hold
// additional data.
"errorType": "<string>",
"error": "<string>",
// Only if there were warnings while executing the request.
// There will still be data in the data field.
"warnings": ["<string>"]
}
02
—
API调用
下面,我们将以两个样例来演示关于API的调用,方便大家理解掌握。
即时查询
说明:该接口属于表达式查询,将根据表达式返回单个时间点的数据。
GET /api/v1/query
POST /api/v1/query
该接口可使用如下参数进行查询,其中time为需要获取值的时间戳,如果不填则默认返回最新的值 。
query=<string>:Prometheus 表达式查询字符串。
time=<rfc3339 | unix_timestamp> :评估时间戳,可选参数。
timeout=<duration>: 查询超时设置,可选参数,默认将使用-query.timeout的全局参数。
示例:
获取实例"192.168.214.108"的node_load5值。
请求的参数如下:
curl http://localhost:9090/api/v1/query?query=node_load5{instance="192.168.214.108:9100"}
status 字段为success,表明请求成功;data字段包括了数据的相关参数,其中value为对应的时间戳和数据值 ,也即是node_load5的值。
{
"status": "success",
"data": {
"resultType": "vector",
"result": [
{
"metric": {
"__name__": "node_load5",
"instance": "192.168.214.108:9100",
"job": "node"
},
"value": [
1666865246.993, # 时间戳
"0.04" # 数据值
]
}
]
}
}
2. 范围查询
GET /api/v1/query_range
POST /api/v1/query_range
该接口支持如下参数查询:
query=<string>:Prometheus 表达式查询字符串。
start=<rfc3339 | unix_timestamp>:开始时间戳。
end=<rfc3339 | unix_timestamp> :结束时间戳。
step=<duration | float>:查询分辨率步长。
timeout=<duration>:查询超时设置,可选参数,默认将使用-query.timeout的全局参数。
示例:
获取实例"192.168.214.108"在某段时间内node_load5的所有值。
请求的参数如下 :
curl http://localhost:9090/api/v1/query_range?query=node_load5{instance="192.168.214.108:9100"}&start=2022-10-28T02:10:10.000Z&end=2022-10-28T02:13:00.000Z&step=60s
以下示例为3分钟范围内的表达式返回值,查询分辨率为60秒,故返回三次值。
{
"status": "success",
"data": {
"resultType": "matrix",
"result": [
{
"metric": {
"__name__": "node_load5",
"instance": "192.168.214.108:9100",
"job": "node"
},
"values": [
[
1666923010,
"0.04"
],
[
1666923070,
"0.04"
],
[
1666923130,
"0.03"
]
]
}
]
}
}
03
—
获取数据
上面的curl访问方式更多是用于测试,在实际应用中,我们通常会用代码的方式来获取数据并进行处理。
此处以Python为例,演示关于代码调用接口的应用方法。(PS:这里需要具备一点Python编程基础)
安装requests库,用于url访问。
$ pip install requests
2. 编写python脚本test_api.py。
# -*- coding: utf-8 -*-
import requests
# 定义参数
url = 'http://192.168.214.108:9090'
query_api = '/api/v1/query'
params = 'query=node_load5{instance="192.168.214.108:9100"}'
# 访问prometheus API获取数据
res = requests.get(url + query_api, params)
metrics = res.json().get("data").get("result")
# 判断结果是否为空
if metrics:
value = metrics[0].get('value')[1]
print('服务器 192.168.214.108的node_load5值为 %s' % value)
else:
print('无法获取有效数据')
脚本运行结果:
$ python test_api.py
服务器 192.168.214.108的node_load5值为 0.01
结语:
本文仅展示了Prometheus API的简单应用,更多的接口使用可参考官方文献:https://prometheus.io/docs/prometheus/latest/querying/api/。
作者:DevOps进阶之路
出处:https://u.kubeinfo.cn/nRXsC5
推荐阅读
K8S 1.25 中的重大更改和删除如何为 Python 应用选择最好的 Docker 镜像?
12 张图讲解 Spark 在 K8S 中实战操作
ES、Kibana on K8S 详解与实战操作
深入理解 K8S Pod 调试与实践技巧
2.8W 字 17 张图,详解 Flink 在 K8S 中的部署与实战操作
用 Grafana Mimir 可视化云原生监控报警
8 张图高可用 Hadoop 在 K8S 中部署完全指南
7 张图入门 Hadoop 在 K8S 环境中部署
8 张图详解 MySQL 在 K8S 环境中部署与监控
K8S 1.25 两特性减少应用滚动上线停机时间Adobe 用 Argo 高级部署模式的最佳实践Docker 镜像构建保姆级入门实战指南12 图入门高性能分布式对象存储 MinIO17 张图实战 + 理清 K8S 网络排错思路,硬核!16 张图硬核讲解 Kubernetes 网络模型